<?php

declare(strict_types=1);

namespace app\common\dao\sys;

use app\common\model\sys\SysFiles;
use app\common\traits\DaoTrait;

/**
 * 上传文件管理表
 * @author:kaige
 * @date:2022-06-12
 * @copyright ©2022 泉州市盛筑信息科技有限公司 版权所有
 */
class FilesDao
{
  // 当前操作的模型
  protected $model = null;

  // 对应模型的主键，默认为id
  protected $pk = 'id';

  // 对应模型默认查询的字段
  protected $name = 'hash';

  // 对应模型允许查询的字段(默认全部查询)
  protected $allowField = ['*'];

  // 允许单字段更新
  protected $uaField = [];

  // 查询结果-要隐藏的字段 默认空数组
  protected $hideField = [];

  public function __construct()
  {
    $this->model = new SysFiles();
  }
  use DaoTrait;

  /**
   * 文件查重
   * @param string $hash
   * @return array|bool 文件信息
   */
  public function get_hash_file($hash)
  {
    $result = $this->model->field('id,name,file_type,file_ext,url')->where('hash', $hash)->find();
    if ($result) {
      return $result->toArray();
    }
    return false;
  }

  /**
   * 获取文件URL
   */
  public function getUrlById($id = '')
  {
    return $this->model->where('id', $id)->value('url');
  }

  /**
   * 获取文件URL --缓存
   */
  public function getUrlByIdCache($id = '')
  {
    return $this->model->where('id', $id)->cache(true)->value('url');
  }

  /**
   * 使用次数变更
   * @param $id
   * @param $num 默认加次数
   * @return bool
   */
  public function useCount($id, $num = 1)
  {
    $re = false;
    if (isset($id) && !empty($id)) {
      $where = [];
      $where[] = ['id', '=', $id];
      if ($num === 1) {
        $re = $this->model->where($where)->inc('use_count')->update();
      } elseif ($num === -1) {
        $where[] = ['use_count', '>', 0];
        $re = $this->model->where($where)->dec('use_count')->update();
      }
    }
    return $re;
  }

  /**
   * 批量更新
   */
  public function multiUpdate($ids, $data)
  {
    return $this->model->where('id', 'in', $ids)->update($data);
  }

}
